home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / icsources.lha / INSERT / SOUNDMON INSERT < prev   
Encoding:
Text File  |  1990-06-23  |  13.7 KB  |  541 lines

  1.  
  2. bpinit:        lea samples(pc),a0
  3.         lea bpsong(pc),a1
  4.         clr.b numtables
  5.         cmpi.w #'V.',26(a1)
  6.         bne.s bpnotv2
  7.         cmpi.b #'2',28(a1)
  8.         bne.s bpnotv2
  9.         move.b 29(a1),numtables
  10. bpnotv2:    move.l #512,d0
  11.         move.w 30(a1),d1        ;d1 now contains length in steps
  12.         moveq.l #1,d2             ;1 is highest pattern number
  13.         mulu #4,d1             ;4 voices per step
  14.         subq.w #1,d1             ;correction for DBRA
  15. findhighest:    cmp.w (a1,d0),d2        ;Is it higher
  16.         bge.s nothigher            ;No
  17.         move.w (a1,d0),d2        ;Yes, so let D2 be highest
  18. nothigher:    addq.l #4,d0             ;Next Voice
  19.         dbra d1,findhighest        ;And search
  20.         move.w 30(a1),d1
  21.         mulu #16,d1             ;16 bytes per step
  22.         move.l #512,d0             ;header is 512 bytes
  23.         mulu #48,d2             ;48 bytes per pattern
  24.         add.l d2,d0
  25.         add.l d1,d0             ;offset for samples
  26.         add.l #bpsong,d0
  27.         move.l d0,tables
  28.         moveq.l #0,d1
  29.         move.b numtables,d1        ;Number of tables
  30.         lsl.l #6,d1             ;x 64
  31.         add.l d1,d0
  32.         move.l #14,d1             ;15 samples
  33.         add.l #32,a1
  34. initloop:    move.l d0,(a0)+
  35.         cmpi.b #$ff,(a1)
  36.         beq.s bpissynth
  37.         move.w 24(a1),d2
  38.         mulu #2,d2             ;Length is in words
  39.         add.l d2,d0             ;offset next sample
  40. bpissynth:    add.l #32,a1             ;Length of Sample Part in header
  41.         dbra d1,initloop
  42.         rts
  43. bpmusic:    bsr bpsynth
  44.         subq.b #1,arpcount
  45.         moveq.l #3,d0
  46.         lea bpcurrent(pc),a0
  47.         move.l #$dff0a0,a1
  48. bploop1:    move.b 12(a0),d4
  49.         ext.w d4
  50.         add.w d4,(a0)
  51.         tst.b $1e(a0)
  52.         bne.s bplfo
  53.         move.w (a0),6(a1)
  54. bplfo:        move.l 4(a0),(a1)
  55.         move.w 8(a0),4(a1)
  56.         tst.b 11(a0)
  57.         bne.s bpdoarp
  58.         tst.b 13(a0)
  59.         beq.s not2
  60. bpdoarp:    tst.b arpcount
  61.         bne.s not0
  62.         move.b 11(a0),d3
  63.         move.b 13(a0),d4
  64.         and.w #240,d4
  65.         and.w #240,d3
  66.         lsr.w #4,d3
  67.         lsr.w #4,d4
  68.         add.w d3,d4
  69.         add.b 10(a0),d4
  70.         bsr bpplayarp
  71.         bra.s not2
  72. not0:        cmpi.b #1,arpcount 
  73.         bne.s not1
  74.         move.b 11(a0),d3
  75.         move.b 13(a0),d4
  76.         and.w #15,d3
  77.         and.w #15,d4
  78.         add.w d3,d4
  79.         add.b 10(a0),d4
  80.         bsr bpplayarp
  81.         bra.s not2
  82. not1:        move.b 10(a0),d4
  83.         bsr bpplayarp
  84. not2:        lea $10(a1),a1
  85.         lea $20(a0),a0
  86.         dbra d0,bploop1
  87.         tst.b arpcount
  88.         bne.s arpnotzero
  89.         move.b #3,arpcount
  90. arpnotzero:    subq.b #1,bpcount
  91.         beq.s bpskip1
  92.         rts
  93. bpskip1:    move.b bpdelay,bpcount
  94. bpplay:        bsr.s bpnext
  95.         move.w dma,$dff096
  96.         ;move.l #$1f4,d0        ;is this a waste ?????
  97. bpxx:        ;dbra d0,bpxx
  98.         moveq.l #3,d0
  99.         move.l #$dff0a0,a1
  100.         moveq.w #1,d1
  101.         lea bpcurrent(pc),a2
  102.         lea bpbuffer(pc),a5
  103. bploop2:    btst #15,(a2)
  104.         beq.s bpskip7
  105.         bsr bpplayit
  106. bpskip7:    asl.w #1,d1
  107.         lea $10(a1),a1
  108.         lea $20(a2),a2
  109.         lea $24(a5),a5
  110.         dbra d0,bploop2
  111.         rts
  112. bpnext:        clr.w dma
  113.         lea bpsong(pc),a0
  114.         move.l #$dff0a0,a3
  115.         moveq.l #3,d0
  116.         moveq.w #1,d7
  117.         lea bpcurrent(pc),a1
  118. bploop3:    moveq.l #0,d1
  119.         move.w bpstep,d1
  120.         lsl.w #4,d1
  121.         move.l d0,d2
  122.         lsl.l #2,d2
  123.         add.l d2,d1
  124.         add.l #512,d1
  125.         move.w (a0,d1),d2
  126.         move.b 2(a0,d1),st
  127.         move.b 3(a0,d1),tr
  128.         subq.w #1,d2
  129.         mulu #48,d2
  130.         moveq.l #0,d3
  131.         move.w 30(a0),d3
  132.         lsl.w #4,d3
  133.         add.l d2,d3
  134.         move.l #$00000200,d4
  135.         move.b bppatcount,d4
  136.         add.l d3,d4
  137.         move.l d4,a2
  138.         add.l a0,a2
  139.         moveq.l #0,d3 
  140.         move.b (a2),d3
  141.         tst.b d3
  142.         bne.s bpskip4
  143.         bra bpoptionals
  144. bpskip4:    clr.w 12(a1)              ;Clear autoslide/autoarpeggio
  145.         move.b 1(a2),d4
  146.         and.b #15,d4
  147.         cmpi.b #10,d4            ;Option 10->transposes off
  148.         bne.s bp_do1
  149.         move.b 2(a2),d4
  150.         and.b #240,d4              ;Higher nibble=transpose
  151.         bne.s bp_not1
  152. bp_do1:        add.b tr,d3
  153.         ext.w d3
  154. bp_not1:    move.b d3,10(a1)         ; Voor Arpeggio's
  155.         lea bpper(pc),a4
  156.         lsl.w #1,d3
  157.         move.w -2(a4,d3.w),(a1)
  158.         bset #15,(a1)
  159.         move.b #$ff,2(a1)
  160.         moveq.w #0,d3
  161.         move.b 1(a2),d3
  162.         lsr.b #4,d3
  163.         and.b #15,d3
  164.         tst.b d3
  165.         bne.s bpskip5
  166.         move.b 3(a1),d3 
  167. bpskip5:     move.b 1(a2),d4
  168.         and.b #15,d4
  169.         cmpi.b #10,d4             ;option 10
  170.         bne.s bp_do2
  171.         move.b 2(a2),d4
  172.         and.b #15,d4
  173.         bne.s bp_not2
  174. bp_do2:        add.b st,d3
  175. bp_not2:    cmpi.w #1,8(a1)
  176.         beq.s bpsamplechange
  177.         cmp.b 3(a1),d3
  178.         beq.s bpoptionals
  179. bpsamplechange:    move.b d3,3(a1)
  180.         or.w d7,dma
  181. bpoptionals:     moveq.l #0,d3
  182.         moveq.l #0,d4
  183.         move.b 1(a2),d3
  184.         and.b #15,d3
  185.         move.b 2(a2),d4
  186.         cmpi.b #0,d3            ; Optionals Here
  187.         bne.s notopt0
  188.         move.b d4,11(a1)
  189. notopt0:    cmpi.b #1,d3
  190.         bne.s bpskip3
  191.         move.w d4,8(a3)
  192.         move.b d4,2(a1)         ; Volume ook in BPCurrent
  193. bpskip3:    cmpi.b #2,d3              ; Set Speed
  194.         bne.s bpskip9
  195.         move.b d4,bpcount
  196.         move.b d4,bpdelay
  197. bpskip9:    cmpi.b #3,d3             ; Filter = LED control
  198.         bne.s bpskipa
  199.         tst.b d4
  200.         bne.s bpskipb
  201.         bset #1,$bfe001
  202.         bra.s bpskip2
  203. bpskipb:    bclr #1,$bfe001
  204. bpskipa:    cmpi.b #4,d3             ; PortUp
  205.         bne.s noportup
  206.         sub.w d4,(a1)             ; Slide data in BPCurrent
  207.         clr.b 11(a1)             ; Arpeggio's uit
  208. noportup:    cmpi.b #5,d3             ; PortDown
  209.         bne.s noportdn
  210.         add.w d4,(a1)             ; Slide down
  211.         clr.b 11(a1)
  212. noportdn:    cmpi.b #6,d3            ; SetRepCount
  213.         bne.s notopt6
  214.         move.b d4,bprepcount
  215. notopt6:    cmpi.b #7,d3            ; DBRA repcount
  216.         bne.s notopt7
  217.         subq.b #1,bprepcount
  218.         beq.s notopt7
  219.         move.w d4,bpstep
  220. notopt7:    cmpi.b #8,d3            ;Set AutoSlide
  221.         bne.s notopt8
  222.         move.b d4,12(a1)
  223. notopt8:    cmpi.b #9,d3            ;Set AutoArpeggio
  224.         bne.s notopt9
  225.         move.b d4,13(a1)
  226. notopt9:
  227. bpskip2:    lea $10(a3),a3
  228.         lea $20(a1),a1
  229.         asl.w #1,d7
  230.         dbra d0,bploop3   
  231.         addq.b #3,bppatcount
  232.         cmpi.b #48,bppatcount
  233.         bne.s bpskip8
  234.         move.b #0,bppatcount
  235.         addq.w #1,bpstep
  236.         lea bpsong(pc),a0
  237.         move.w 30(a0),d1
  238.         cmp.w bpstep,d1
  239.         bne.s bpskip8
  240.         move.w #0,bpstep
  241. bpskip8:    rts
  242. bpplayit:    bclr #15,(a2)
  243.         tst.l (a5)             ;Was EG used
  244.         beq.s noeg1             ;No ??
  245.         moveq.w #0,d3             ;Well then copy
  246.         move.l (a5),a4             ;Old waveform back
  247.         moveq #7,d7             ;to waveform tables
  248. eg1loop:    move.l 4(a5,d3.w),(a4)+        ;Copy...
  249.         addq.w #4,d3             ;Copy...
  250.         dbra d7,eg1loop            ;Copy...
  251. noeg1:        move.w (a2),6(a1)        ;Period from bpcurrent
  252.         moveq.l #0,d7
  253.         move.b 3(a2),d7            ;Instrument number
  254.         move.l d7,d6             ;Also in d6
  255.         lsl.l #5,d7             ;Header offset    
  256.         lea bpsong(pc),a3
  257.         cmpi.b #$ff,(a3,d7.w)        ;Is synthetic
  258.         beq.s bpplaysynthetic        ;Yes ??
  259.         clr.l (a5)             ;EG Off
  260.         clr.b $1a(a2)             ;Synthetic mode off
  261.         clr.w $1e(a2)             ;Lfo Off
  262.         add.l #24,d7             ;24 is name->ignore
  263.         lsl.l #2,d6             ;x4 for sample offset
  264.         move.l #samples,a4
  265.         move.l -4(a4,d6),d4        ;Fetch sample pointer
  266.         beq.s bp_nosamp            ;is zero->no sample
  267.         move.l d4,(a1)             ;Sample pointer in hardware
  268.         move.w (a3,d7),4(a1)        ;length in hardware
  269.         move.b 2(a2),9(a1)        ;and volume from bpcurrent
  270.         cmpi.b #$ff,2(a2)        ;Use default volume
  271.         bne.s skipxx             ;No ??
  272.         move.w 6(a3,d7),8(a1)        ;Default volume in hardware
  273. skipxx:     move.w 4(a3,d7),8(a2)        ;Length in bpcurrent
  274.         moveq.l #0,d6
  275.         move.w 2(a3,d7),d6        ;Calculate repeat
  276.         add.l d6,d4
  277.         move.l d4,4(a2)            ;sample start in bpcurrent
  278.         cmpi.w #1,8(a2)            ;has sample repeat part
  279.         bne.s bpskip6             ;Yes ??
  280. bp_nosamp:    move.l #null,4(a2)        ;Play no sample
  281.         bra.s bpskip10
  282. bpskip6:    move.w 8(a2),4(a1)        ;Length to hardware
  283.         move.l 4(a2),(a1)        ;pointer to hardware
  284. bpskip10:    or.w #$8000,d1            ;Turn on DMA for this voice
  285.         move.w d1,$dff096        ;Yeah, do it
  286.         rts
  287. bpplaysynthetic:move.b #$1,$1a(a2)        ;Synthetic mode on
  288.         clr.w $e(a2)             ;EG Pointer restart
  289.         clr.w $10(a2)             ;LFO Pointer restart
  290.         clr.w $12(a2)             ;ADSR Pointer restart
  291.         move.w 22(a3,d7.w),$14(a2)    ;EG Delay
  292.         addq.w #1,$14(a2)        ;0 is nodelay
  293.         move.w 14(a3,d7.w),$16(a2)    ;LFO Delay
  294.         addq.w #1,$16(a2)        ;So I need correction
  295.         move.w #1,$18(a2)        ;ADSR Delay->Start immediate
  296.         move.b 17(a3,d7.w),$1d(a2)    ;EG OOC
  297.         move.b 9(a3,d7.w),$1e(a2)    ;LFO OOC
  298.         move.b 4(a3,d7.w),$1f(a2)    ;ADSR OOC
  299.         move.b 19(a3,d7.w),$1c(a2)    ;Current EG Value
  300.         move.l tables,a4        ; so far so good,now what ??
  301.         moveq.l #0,d3            ;Pointer to waveform tables
  302.         move.b 1(a3,d7.w),d3        ;Which waveform
  303.         lsl.l #6,d3             ;x64 is length waveform table
  304.         add.l d3,a4
  305.         move.l a4,(a1)             ;Sample Pointer
  306.         move.l a4,4(a2)            ;In bpcurrent
  307.         move.w 2(a3,d7.w),4(a1)        ;Length in words
  308.         move.w 2(a3,d7.w),8(a2)        ;Length in bpcurrent
  309.         tst.b 4(a3,d7.w)        ;Is ADSR on
  310.         beq.s bpadsroff            ;No ??
  311.         move.l tables,a4        ;Tables
  312.         moveq.l #0,d3
  313.         move.b 5(a3,d7.w),d3        ;ADSR table number
  314.         lsl.l #6,d3             ;x64 for length
  315.         add.l d3,a4             ;Add it
  316.         moveq.w #0,d3
  317.         move.b (a4),d3             ;Get table value
  318.         add.b #128,d3             ;I want it from 0..255
  319.         lsr.w #2,d3             ;Divide by 4->0..63
  320.         cmpi.b #$ff,2(a2)
  321.         bne.s bpskip99
  322.         move.b 25(a3,d7.w),2(a2)
  323. bpskip99:    moveq.w #0,d4
  324.         move.b 2(a2),d4            ;Default volume
  325.         mulu d4,d3             ;default maal init volume
  326.         lsr.w #6,d3             ;divide by 64
  327.         move.w d3,8(a1)            ;is new volume
  328.         bra.s bpflipper
  329. bpadsroff:    move.b 2(a2),9(a1)
  330.         cmpi.b #$ff,2(a2)
  331.         bne.s bpflipper            ;No ADSR
  332.         move.b 25(a3,d7.w),9(a1)    ;So use default volume
  333. bpflipper:    move.l 4(a2),a4            ;Pointer on waveform
  334.         move.l a4,(a5)             ;Save it
  335.         moveq.w #0,d3             ;Save Old waveform
  336.         moveq #7,d4             ;data in bpbuffer
  337. eg2loop:    move.l (a4,d3.w),4(a5,d3.w)
  338.         addq.w #4,d3             ;Copy         
  339.         dbra d4,eg2loop
  340.         tst.b 17(a3,d7.w)        ;EG off
  341.         beq bpskip10            ;Yes ??
  342.         tst.b 19(a3,d7.w)        ;Is there an init value for EG
  343.         beq bpskip10            ;No ??
  344.         moveq.l #0,d3
  345.         move.b 19(a3,d7.w),d3
  346.         lsr.l #3,d3             ;Divide by 8 ->0..31
  347.         move.b d3,$1c(a2)        ;Current EG Value
  348.         subq.l #1,d3             ;-1,DBRA correction
  349. eg3loop:    neg.b (a4)+
  350.         dbra d3,eg3loop
  351.         bra bpskip10
  352. bpplayarp:    lea bpper(pc),a4
  353.         ext.w d4
  354.         asl.w #1,d4
  355.         move.w -2(a4,d4.w),6(a1)
  356.         rts
  357. bpsynth:    move.l #3,d0
  358.         lea bpcurrent(pc),a2
  359.         lea $dff0a0,a1
  360.         lea bpsong(pc),a3
  361.         lea bpbuffer(pc),a5
  362. bpsynthloop:    tst.b $1a(a2)             ;Is synthetic sound
  363.         beq.s bpnosynth            ;No ??
  364.         bsr.s bpyessynth            ;Yes         
  365. bpnosynth:    lea $24(a5),a5
  366.         lea $20(a2),a2
  367.         lea $10(a1),a1
  368.         dbra d0,bpsynthloop
  369.         rts
  370. bpyessynth:    moveq.w #0,d7
  371.         move.b 3(a2),d7            ;Which instr. was I playing
  372.         lsl.w #5,d7             ;x32, is length of instr.
  373.         tst.b $1f(a2)             ;ADSR off
  374.         beq.s bpendadsr            ;Yes ??
  375.         subq.w #1,$18(a2)        ;Delay,May I
  376.         bne.s bpendadsr            ;No ??
  377.         moveq.l #0,d3
  378.         move.b 8(a3,d7.w),d3
  379.         move.w d3,$18(a2)        ;Reset Delay Counter
  380.         move.l tables,a4
  381.         move.b 5(a3,d7.w),d3        ;Which ADSR table
  382.         lsl.l #6,d3             ;x64
  383.         add.l d3,a4             ;This is my table
  384.         move.w $12(a2),d3        ;Get ADSR table pointer
  385.         moveq.w #0,d4
  386.         move.b (a4,d3.w),d4        ;Value from table
  387.         add.b #128,d4             ;Want it from 0..255
  388.         lsr.w #2,d4             ;And now from 0..63
  389.         moveq.w #0,d3
  390.         move.b 2(a2),d3            ;Current Volume
  391.         mulu d3,d4             ;MultiPly with table volume
  392.         lsr.w #6,d4             ;Divide by 64=New volume
  393.         move.w d4,8(a1)            ;Volume in hardware
  394.         addq.w #1,$12(a2)        ;Increment of ADSR pointer
  395.         move.w 6(a3,d7.w),d4        ;Length of adsr table
  396.         cmp.w $12(a2),d4        ;End of table reached
  397.         bne.s bpendadsr            ;No ??
  398.         clr.w $12(a2)             ;Clear ADSR Pointer
  399.         cmpi.b #1,$1f(a2)        ;Once
  400.         bne.s bpendadsr            ;No ??
  401.         clr.b $1f(a2)             ;ADSR off
  402. bpendadsr:    tst.b $1e(a2)             ;LFO On
  403.         beq.s bpendlfo            ;No ??
  404.         subq.w #1,$16(a2)        ;LFO delay,May I
  405.         bne.s bpendlfo            ;No
  406.         moveq.l #0,d3
  407.         move.b 16(a3,d7.w),d3
  408.         move.w d3,$16(a2)        ;Set LFO Count
  409.         move.l tables,a4
  410.         move.b 10(a3,d7.w),d3        ;Which LFO table
  411.         lsl.l #6,d3             ;x64
  412.         add.l d3,a4
  413.         move.w $10(a2),d3        ;LFO pointer
  414.         moveq.l #0,d4
  415.         move.b (a4,d3.w),d4        ;That's my value
  416.         ext.w d4             ;Make it a word
  417.         ext.l d4             ;And a longword
  418.         moveq.l #0,d5
  419.         move.b 11(a3,d7.w),d5        ;LFO depth
  420.         tst.b d5
  421.         beq.s bpnotx
  422.         divs d5,d4             ;Calculate it
  423. bpnotx:        move.w (a2),d5             ;Period
  424.         add.w d4,d5             ;New Period
  425.         move.w d5,6(a1)            ;In hardware
  426.         addq.w #1,$10(a2)        ;Next position
  427.         move.w 12(a3,d7.w),d3        ;LFO table Length
  428.         cmp.w $10(a2),d3        ;End Reached
  429.         bne.s bpendlfo            ;NO ??
  430.         clr.w $10(a2)             ;Reset LFO Pointer
  431.         cmpi.b #1,$1e(a2)        ;Once LFO
  432.         bne.s bpendlfo            ;NO ??
  433.         clr.b $1e(a2)             ;LFO Off
  434. bpendlfo:    tst.b $1d(a2)             ;EG On
  435.         beq bpendeg             ;No ??
  436.         subq.w #1,$14(a2)        ;EG delay,May I
  437.         bne bpendeg             ;No
  438.         tst.l (a5)
  439.         beq.s bpendeg
  440.         moveq.l #0,d3
  441.         move.b 24(a3,d7.w),d3
  442.         move.w d3,$14(a2)        ;Set EG Count
  443.         move.l tables,a4
  444.         move.b 18(a3,d7.w),d3        ;Which EG table
  445.         lsl.l #6,d3             ;x64
  446.         add.l d3,a4
  447.         move.w $e(a2),d3        ;EG pointer
  448.         moveq.l #0,d4
  449.         move.b (a4,d3.w),d4        ;That's my value
  450.         move.l (a5),a4             ;Pointer to waveform
  451.         add.b #128,d4             ;0..255
  452.         lsr.l #3,d4             ;0..31
  453.         moveq.l #0,d3
  454.         move.b $1c(a2),d3        ;Old EG Value
  455.         move.b d4,$1c(a2)
  456.         add.l d3,a4             ;WaveForm Position
  457.         move.l a5,a6             ;Buffer
  458.         add.l d3,a6             ;Position
  459.         addq.l #4,a6             ;For adress in buffer
  460.         cmp.b d3,d4             ;Compare old with new value
  461.         beq.s bpnexteg            ;no change ??
  462.         bgt bpishigh            ;new value is higher
  463. bpislow:    sub.l d4,d3             ;oldvalue-newvalue
  464.         subq.l #1,d3             ;Correction for DBRA
  465. bpegloop1a:    move.b -(a6),d4
  466.         move.b d4,-(a4)
  467.         dbra d3,bpegloop1a  
  468.         bra.s bpnexteg
  469. bpishigh:    sub.l d3,d4             ;Newvalue-oldvalue
  470.         subq.l #1,d4             ;Correction for DBRA
  471. bpegloop1b:    move.b (a6)+,d3
  472.         neg.b d3
  473.         move.b d3,(a4)+            ;DoIt
  474.         dbra d4,bpegloop1b
  475. bpnexteg:    addq.w #1,$e(a2)        ;Next position
  476.         move.w 20(a3,d7.w),d3        ;EG table Length
  477.         cmp.w $e(a2),d3            ;End Reached
  478.         bne.s bpendeg             ;NO ??
  479.         clr.w $e(a2)             ;Reset EG Pointer
  480.         cmpi.b #1,$1d(a2)        ;Once EG
  481.         bne.s bpendeg             ;NO ??
  482.         clr.b $1d(a2)             ;EG Off
  483. bpendeg:    rts
  484.  
  485. null:        dc.w 0
  486. bpcurrent:    dc.w 0,0            ;periode,instrument =(volume.b,instr nr.b)
  487.         dc.l null            ;start
  488.         dc.w 1                ;length (words)
  489.         dc.b 0,0,0,0             ;noot,arpeggio,autoslide,autoarpeggio
  490.         dc.w 0,0,0            ;EG,LFO,ADSR pointers
  491.         dc.w 0,0,0            ;EG,LFO,ADSR count
  492.         dc.b 0,0            ;Synthetic yes/no, Volume Slide
  493.         dc.b 0,0            ;Current EG value,EG OOC
  494.         dc.b 0,0            ;LFO OOC,ADSR OOC
  495.  
  496.         dc.w 0,0
  497.         dc.l null
  498.         dc.w 1,0,0
  499.         dc.w 0,0,0,0,0,0,0,0,0
  500.  
  501.         dc.w 0,0
  502.         dc.l null
  503.         dc.w 1,0,0
  504.         dc.w 0,0,0,0,0,0,0,0,0
  505.  
  506.         dc.w 0,0
  507.         dc.l null
  508.         dc.w 1,0,0
  509.         dc.w 0,0,0,0,0,0,0,0,0
  510.  
  511. bpstep:        dc.w 0
  512. bppatcount:    dc.b 0
  513. st:        dc.b 0
  514. tr:        dc.b 0
  515. bpcount:    dc.b 1
  516. bpdelay:    dc.b 6
  517. arpcount:    dc.b 1
  518. bprepcount:    dc.b 1
  519. numtables:    dc.b 0
  520.  
  521.         even
  522.  
  523. dma:        dc.w 0
  524. tables:        dc.l 0
  525.  
  526. bpbuffer:    dcb.b 144,0
  527.         dc.w 6848,6464,6080,5760,5440,5120,4832,4576,4320,4064,3840,3616
  528.         dc.w 3424,3232,3040,2880,2720,2560,2416,2288,2160,2032,1920,1808
  529.         dc.w 1712,1616,1520,1440,1360,1280,1208,1144,1080,1016,0960,0904
  530.  
  531. bpper:        dc.w 0856,0808,0760,0720,0680,0640,0604,0572,0540,0508,0480,0452
  532.         dc.w 0428,0404,0380,0360,0340,0320,0302,0286,0270,0254,0240,0226
  533.         dc.w 0214,0202,0190,0180,0170,0160,0151,0143,0135,0127,0120,0113
  534.         dc.w 0107,0101,0095,0090,0085,0080,0076,0072,0068,0064,0060,0057
  535.  
  536. samples:    dcb.l 15,0
  537.  
  538. bpsong:        incbin "df1:modules/bp.bach"
  539.  
  540.         
  541.